<
language> A fully integrated
Haskell programming
environment. It provides tightly coupled interactive editing,
incremental compilation and dynamic execution of
Haskell
programs. Two major modes of compilation, correspond to
Lisp's traditional "interpreted" and "compiled" modes.
Compiled and interpreted modules may be freely mixed in any
combination.
Yale Haskell is run using either a command-line interface or
as an
inferior process running under the
Emacs editor.
Using the Emacs interface, simple two-keystroke commands
evaluate expressions, run dialogues, compile
modules, turn
specific compiler diagnostics on and off and enable and
disable various
optimisers. Commands may be queued up
arbitrarily, thus allowing, for example, a compilation to be
running in the background as the editing of a source file
continues in Emacs in the foreground.
A "scratch pad" may be automatically created for any module.
Such a pad is a logical extension of the module, in which
additional function and value definitions may be added, but
whose evaluation does not result in recompilation of the
module.
A tutorial on
Haskell is also provided in the Emacs
environment. A
Macintosh version of
Yale Haskell includes
its own integrated programming environment, complete with an
Emacs-like editor and
pull-down menus.
Yale Haskell is a complete implementation of the
Haskell
language, but also contains a number of extensions, including:
(1) Instead of stream based I/O, a
monadic I/O system is
used. Although similar to what will be part of the new
Haskell 1.3 report, the I/O system will change yet again
when 1.3 becomes official.
(2)
Haskell programs can call both
Lisp and
C functions
using a flexible foreign function interface.
(3)
Yale Haskell includes a
dynamic typing system. Dynamic
typing has been used to implement
derived instances in a
user extensible manner.
(4) A number of small
Haskell 1.3 changes have been added,
including
polymorphic recursion and the use of @_@ in an
expression to denote
bottom. Although the 1.3 report is not
yet complete, these changes will almost certainly be part of
the new report.
(5) A complete
Haskell level
X Window System interface,
based on
CLX.
(6) A number of
annotations are available for controlling
the optimiser, including those for specifying both function
and data constructor
strictness properties, "
inlining"
functions, and specialising
over-loaded functions. Many
standard
prelude functions have been specialised for better
performance using these annotations.
(7)
Separate compilation (including
mutually recursive
modules) is supported using a notion of a UNIT file, which
is a kind of localised
makefile that tells the compiler
about compiler options and logical dependencies amongst
program files.
(8)
Yale Haskell supports both standard and "
literate"
Haskell syntax.
Performance of
Yale Haskell's compiled code has been improved
considerably over previous releases. Although still not as
good as the Glasgow (
GHC) and Chalmers (
HBC) compilers,
the flexibility afforded by the features described earlier
makes
Yale Haskell a good choice for large systems
development. For some idea of performance, Hartel's latest
"Nuc" benchmark runs at about the same speed under both
Yale
Haskell and hbc. (Our experiments suggest, however, that
Yale
Haskell's compiled code is on average about 3 times slower
than hbc.)
Binaries are provided for
Sun/
SPARC and
Macintosh, but
it is possible to build the system on virtually any system
that runs one of a number of
Common Lisp implementations:
CMU Common Lisp,
Lucid Common Lisp,
Allegro Common Lisp
or
Harlequin LispWorks.
akcl,
gcl and
CLisp do not
have adaquate performance for our compiler. The current
version is 2.1.
haskell/yale">Yale (ftp://nebula.cs.yale.edu/pub/haskell/yale).
(128.36.13.1). {
haskell/yale/">UK
(ftp://ftp.dcs.glasgow.ac.uk/pub/haskell/yale/)}. {
haskell/yale/">Sweden
(ftp://ftp.cs.chalmers.se/pub/haskell/yale/)}. E-mail:
<
haskell-request@cs.yale.edu>,
<
haskell-request@dcs.glasgow.ac.uk>.
(1993-07-14)